package cn.jingyuan.bee.utils.date;

import java.util.Calendar;

/**
 * 星期枚举<br>
 * 与 Calendar 中的星期 int 值对应
 *
 * @see #SUNDAY
 * @see #MONDAY
 * @see #TUESDAY
 * @see #WEDNESDAY
 * @see #THURSDAY
 * @see #FRIDAY
 * @see #SATURDAY
 */
public enum Week {

    /** 周日 */
    SUNDAY(Calendar.SUNDAY),

    /** 周一 */
    MONDAY(Calendar.MONDAY),

    /** 周二 */
    TUESDAY(Calendar.TUESDAY),

    /** 周三 */
    WEDNESDAY(Calendar.WEDNESDAY),

    /** 周四 */
    THURSDAY(Calendar.THURSDAY),

    /** 周五 */
    FRIDAY(Calendar.FRIDAY),

    /** 周六 */
    SATURDAY(Calendar.SATURDAY);

    /** 星期对应 {@link Calendar} 中的 Week 值 */
    private final int value;

    /**
     * 构造
     *
     * @param value 星期对应 {@link Calendar} 中的 Week 值
     */
    Week(int value) {
        this.value = value;
    }

    /**
     * 将 {@link Calendar} 星期相关值转换为 Week 枚举对象<br>
     *
     * @param calendarWeekIntValue Calendar 中关于 Week 的 int 值
     *
     * @return {@link Week}
     *
     * @see #SUNDAY
     * @see #MONDAY
     * @see #TUESDAY
     * @see #WEDNESDAY
     * @see #THURSDAY
     * @see #FRIDAY
     * @see #SATURDAY
     */
    public static Week of(int calendarWeekIntValue) {
        switch (calendarWeekIntValue) {
            case Calendar.SUNDAY:
                return SUNDAY;
            case Calendar.MONDAY:
                return MONDAY;
            case Calendar.TUESDAY:
                return TUESDAY;
            case Calendar.WEDNESDAY:
                return WEDNESDAY;
            case Calendar.THURSDAY:
                return THURSDAY;
            case Calendar.FRIDAY:
                return FRIDAY;
            case Calendar.SATURDAY:
                return SATURDAY;
            default:
                return null;
        }
    }

    /**
     * 获得星期对应 {@link Calendar} 中的 Week 值
     *
     * @return 星期对应 {@link Calendar} 中的 Week 值
     */
    public int getValue() {
        return this.value;
    }

    /**
     * 转换为中文名
     *
     * @return 星期的中文名
     */
    public String toChinese() {
        return toChinese("星期");
    }

    /**
     * 转换为中文名
     *
     * @param weekNamePre 表示星期的前缀，例如前缀为“星期”，则返回结果为“星期一”；前缀为”周“，结果为“周一”
     *
     * @return 星期的中文名
     */
    public String toChinese(String weekNamePre) {
        switch (this) {
            case SUNDAY:
                return weekNamePre + "日";
            case MONDAY:
                return weekNamePre + "一";
            case TUESDAY:
                return weekNamePre + "二";
            case WEDNESDAY:
                return weekNamePre + "三";
            case THURSDAY:
                return weekNamePre + "四";
            case FRIDAY:
                return weekNamePre + "五";
            case SATURDAY:
                return weekNamePre + "六";
            default:
                return null;
        }
    }

}
